/*
********************************************************************************
*
*
********************************************************************************
*/
#include "bsp_hal.h"
#include "sys_ext.h"
#include "com_obj.h"

#define APP_TIM        TIM7

#define APP_TIM_PERIOD 1000

/******************************************************************************
*	                            function
*******************************************************************************/
uint32_t app_tick_init(uint32_t TickPriority);
void app_tick_suspend(void);
void app_tick_resume(void);
uint32_t app_tick_get(void);
uint32_t app_tick_us_get(void);
void app_tick_isr(void);

/******************************************************************************
*	                            var
*******************************************************************************/
volatile uint32_t hal_tick_cnt = 0;
vtask_vector_type app_tick_task_list;

/*******************************************************************************
* @brief  app_tick_init
* \param[in] none
* \retval: none
*******************************************************************************/
uint32_t app_tick_init(uint32_t TickPriority)
{
  intx_alloc();

  intx_disable();

  vtask_list_init(&app_tick_task_list, 0);

  intx_enable();

  return 0;
}

/*******************************************************************************
* @brief  app_tick_suspend
* \param[in] none
* \retval: none
*******************************************************************************/
void app_tick_suspend(void)
{

}

/*******************************************************************************
* @brief  app_tick_resume
* \param[in] none
* \retval: none
*******************************************************************************/
void app_tick_resume(void)
{

}

/*******************************************************************************
* @brief  app_tick_get
* \param[in] none
* \retval: none
*******************************************************************************/
uint32_t app_tick_get(void)
{
  return hal_tick_cnt;
}

/*******************************************************************************
* @brief  app_tick_us_get
* \param[in] none
* \retval: none
*******************************************************************************/
uint32_t app_tick_us_get(void)
{
  uint32_t time_us;

  time_us = hal_tick_cnt * APP_TIM_PERIOD;
  time_us += APP_TIM->CNT;

  return time_us;
}


/*******************************************************************************
* @brief  app_tick_isr
* \param[in] none
* \retval: none
*******************************************************************************/
void app_timer_isr(void)
{
  hal_tick_cnt++;
  
  vtask_list_run_once_nohook(&app_tick_task_list);
}

